#pragma once

#include <chrono>
#include <future>
#include <mutex>
#include <queue>
#include <iostream>
#include <string>
#include <list>
#include <atomic>
#include <functional>
#include <condition_variable>

using namespace std;

/**
 * @brief The ProduceConsume class              简单生产和消费类， 生产者每生产一个数据， 通知消费者直接消费
 */
class ProduceConsume
{
public:
    ProduceConsume();

    void startThread();
    static void ThreadProducer(void *arg);
    static void ThreadConsumer(void *arg);

protected:
    static std::condition_variable m_variable;      // 条件变量
    static std::mutex m_mutex;                      // 互斥锁
    static list<int> m_dataList;                    // 数据列表
    std::atomic<bool> m_runFlag;                    // 线程运行标记(原子操作, 线程安全)
};
